home *** CD-ROM | disk | FTP | other *** search
/ Enter 2005 August / EnterCD 08_2005.iso / dosapps / ndn / SSAVERS / SOURCE / AZ_FIRE.ASM < prev    next >
Encoding:
Assembly Source File  |  1995-12-04  |  4.9 KB  |  161 lines

  1. ;*************************************************************************
  2. ;
  3. ;      Dos Navigator II Screen Saver source
  4. ;      (C)opyright 1995 Andy Zabolotny
  5. ;
  6. ;      This source is freeware and licenced only for non-commercial use
  7. ;
  8. ;*************************************************************************
  9.  
  10.                 .model  tiny
  11.                 .code
  12.                 .386
  13.                 org     100h
  14.                 locals  @@
  15.                 jumps
  16.  
  17. WaveW           equ     320
  18. WaveH           equ     100
  19. WaveAddr        equ     (320-WaveW)/2
  20.  
  21. Start:          call    InitChanges
  22.                 mov     al,es:[449h]
  23.                 mov     LastMode,al
  24.                 call    InitVideo
  25.  
  26.                 push    ds
  27.                 pop     es
  28.                 mov     cx,WaveW * WaveH * 2 / 4 + 1
  29.                 xor     eax,eax
  30.                 mov     di,offset WaveImage1
  31.                 rep     stosd
  32.  
  33.                 mov     ax,0A000h
  34.                 mov     es,ax
  35. @@waveLoop:     mov     si,Wave1
  36.                 add     si,WaveW - 1
  37.                 mov     di,Wave2
  38.                 inc     di
  39.                 ;mov     ebx,[si-WaveW]
  40.                 mov     ecx,[si]
  41.                 mov     edx,[si+WaveW]
  42.                 mov     bl,0
  43.                 add     si,4
  44.  
  45.                 mov     bp,WaveW * (WaveH - 2)
  46. @@waveLine:     ;mov     al,[si-WaveW]
  47.                 ;shrd    ebx,eax,8
  48.                 mov     al,[si]
  49.                 shrd    ecx,eax,8
  50.                 mov     al,[si+WaveW]
  51.                 shrd    edx,eax,8
  52.                 inc     si
  53.                 shld    eax,ecx,16
  54.                 add     al,cl
  55.                 setc    ah
  56.                 add     al,ch
  57.                 adc     ah,0
  58.                 add     al,dh
  59.                 adc     ah,0
  60.                 ror     ax,2
  61.                 test    al,al
  62.                 jz      @@put
  63.                 test    cl,1
  64.                 setnz   ah
  65.                 sub     al,ah
  66. @@put:          mov     [di],al
  67.                 inc     di
  68.                 dec     bp
  69.                 jnz     @@waveLine
  70.  
  71.                 mov     cx,WaveW
  72.                 mov     dx,randSeed
  73. @@MakeSeed:     add     bx,05EDAh
  74.                 xor     bx,dx
  75.                 add     dx,0E34Ah
  76.                 mov     dl,bh
  77.                 add     dh,bl
  78.                 adc     dl,al
  79.                 add     bx,dx
  80.                 rol     bx,3
  81.                 mov     al,bl
  82.                 and     al,07Fh
  83.                 mov     [di],al
  84.                 inc     di
  85.                 loop    @@MakeSeed
  86.                 mov     randSeed,dx
  87.  
  88.                 mov     si,Wave1
  89.                 xchg    si,Wave2
  90.                 mov     Wave1,si
  91.                 add     si,WaveW
  92.                 mov     di,WaveAddr+320
  93.                 mov     dx,WaveH-2-2
  94. @@refresh0:     mov     cx,WaveW/4
  95.                 rep     movsd
  96.                 add     di,(320 - WaveW)
  97.                 dec     dx
  98.                 jne     @@refresh0
  99.                 call    Pause
  100.                 call    CheckChanges
  101.                 jnc     @@WaveLoop
  102.  
  103.                 mov     ax,0C0Bh
  104.                 int     21h                     ; Clear keyboard
  105.                 mov     ah,0
  106.                 mov     al,LastMode
  107.                 int     10h
  108.                 int     20h
  109.  
  110. InitVideo       proc    near
  111.                 mov     ax,13h
  112.                 int     10h
  113.                 mov     dx,CRTstatus
  114.                 sub     dl,6
  115.                 mov     ax,0309h
  116.                 out     dx,ax
  117.  
  118.                 mov     dx,03C8h
  119.                 mov     al,0
  120.                 out     dx,al
  121.                 inc     dx
  122.                 mov     si,offset PalData
  123.                 mov     cl,nPalColors
  124.  
  125. @@makePal:      mov     ch,32
  126. @@makeRamp:     mov     di,3
  127.                 xor     bx,bx
  128. @@makeRGB:      mov     al,32
  129.                 sub     al,ch
  130.                 mov     ah,[si+bx+3]
  131.                 sub     ah,[si+bx]
  132.                 imul    ah
  133.                 sar     ax,5
  134.                 add     al,[si+bx]
  135.                 out     dx,al
  136.                 inc     bx
  137.                 dec     di
  138.                 jne     @@makeRGB
  139.                 dec     ch
  140.                 jne     @@makeRamp
  141.                 add     si,6
  142.                 dec     cl
  143.                 jne     @@makePal
  144.                 ret
  145. InitVideo       endp
  146.  
  147. include mTask.inc
  148. include az_ss.inc
  149.  
  150. randSeed        dw      ?
  151. LastMode        db      0
  152. PalData         db      00,00,00, 24,00,00
  153.                 db      25,01,00, 48,32,08
  154.                 db      50,33,08, 63,63,63
  155. nPalColors      equ     ($ - PalData)/6
  156. Wave1           dw      offset WaveImage1       ;offset WaveImage1
  157. Wave2           dw      offset WaveImage2       ;offset WaveImage2
  158. WaveImage1      db      WaveW * WaveH dup (?)
  159. WaveImage2      db      WaveW * WaveH dup (?)
  160.                 end     Start
  161.